8.4.4. İkili Arama Ağacından Düğüm Silme Algoritması İkili arama ağacından düğüm silme üzerinde durulması gereken bir durumdur; hem tüm kritik durumlar gözönüne alınmalı, hem ağacın dengesi çok bozulmamalı, hem de ikili arama ağacı özelliği korunmalıdır. Genel olarak bir ağaçtan düğüm silinirken/çıkarılırken 3 durumdan birisiyle karşılaşılır. Silinecek düğüm,
Ekleme için gerekli bağlantıları yapıldıktan sonra çıkarılan düğümün
işgal ettiği bellek alanı serbest bırakılmalıdır. Eğer, ağaç kurulurken
malloc() benzeri bir fonksiyonla dinamik bellek alanı alınmışsa free()
fonksiyonu kullanılır. Şekilde d)'de görüleceği gibi silinecek düğümün
iki çocuğu da varsa, yani ona bağlı iki altağaç varsa, soldaki altağaç
sağdaki altağacın en küçük değere sahip düğümün soluna eklenmektedir. Bir önceki silme yönteminde, eğer silinecek düğümün iki çocuğu da varsa, yani ona bağlı iki altağaç varsa, soldaki altağaç sağdaki altağacın en küçük değere sahip düğümün soluna eklenmektedir. Bu durum, özellikle çok fazla silinmelerin yapıldığı uygulamalarda ağacın dengeli olmasını bozup ağacın tek yönde, bağlantılı liste gibi büyümesine neden olabilir. Böylesi durumlarda, zaman maliyeti biraz artsa da dengeli silme yapan algoritma kullanılmalıdır. Böyle bir algoritmanın davranışı şekilde verildiği gibi olabilir. Aşağıda silinecek düğümü en fazla bir çocuklu hale getiren bir silme algoritmasının kaba-kodu verilmiştir: İkili arama ağacından düğüm silme/çıkartma algoritması
kaba-kodu
|